查看原文
其他

为什么这么多人不喜欢谭浩强的C语言程序设计?

Editor's Note

大学C语言入门必备红宝书——谭浩强老爷子的《C程序设计》,你觉得这本书写得怎么样?

The following article is from 嵌入式ARM Author 嵌入式ARM


他,是谁?

谭浩强教授,我国著名计算机教育专家。


1958年毕业于清华大学自动控制系。

青年时期曾担任清华大学学生会主席、北京市学联副主席、北京市人大代表、全国文教战线先进分子。

他是我国计算机普及和高校计算机基础教育的开拓者之一。

现任全国高等院校计算机基础教育研究会荣誉会长、教育部全国计算机应用技术证书考试委员会主任委员,享受国务院政府特殊津贴。

曾获国家科技进步奖、国家级教学成果奖,被原国家科学技术委员会和中国科学技术协会表彰为“全国先进科普工作者”,被北京市人民政府评为“北京市有突出贡献的专家”。

他在CCTV讲了BASIC,FORTRAN,COBOL,Pascal,QBASIC,C,Visual Basic七种计算机语言,观众超过500万人。

谭浩强教授善于用读者容易理解的方法和语言说明复杂的概念。

许多人认为他开创了计算机书籍贴近大众的新风,为我国的计算机普及事业作出重要的贡献。

21世纪初,被《计算机世界》报组织的“世纪评选”评为“我国20世纪最有影响的十个IT人物”,被《电脑报》评为“我国十大IT人物”,他的功绩是把千百万群众带入计算机的大门。

然而,从很久以前开始,他所著的《C程序设计》就一直被吐槽不断。


这本书几乎是每个程序员必经的“童年”。

这本书已经出到了第五版。

▍那么这究竟是为什么,大家会说这本书是坑?

1、这本书本身存在很多语法错误,主要是理解或者版本更迭没有及时更新造成,中国大学里面很多教材更迭相对偏慢。

随着计算机软件领域的飞速发展,现在这本书因为内容比较老,可能已经不太适宜做教材。

另外,这本书还是翻译过来的,语言差异加上翻译上理解的偏差,造成书中部分语法和概念确实有一定的问题。

甚至在网上,你还可以看到诸如《谭浩强<C程序设计>错误不完全汇集》的整整50页的纠正文档。(基于第四版的纠错,第五版已修复大部分)


之前嵌入式ARM曾推送过的文章《你有没有想过,C语言 main 函数到底为啥这么写?》中,许多人会错写成void main()的形式,其实就是早期谭老未更正教材的错误之一。

知乎还有人整理出了长长的错误列表……


2、内容过于老旧,甚至有些程序内容都无法运行,当然这是编译器支持不同的C标准造成的。

这本书甚至大学许多教师的编译环境还是turbo C,这个老古董已经非常过时了,显得这本书非常的low,欠缺与时俱进。

但是此书确实更新速度比较慢,在2000年以后出的版本仍然支持的是C89标准。

3、后期高质量的书非常多,排版也非常清晰,比如说《C Primer Plus》几乎可以取代这本书,但谭老这本书仍然还是作为大学的教材主力。

4、有的人表示这本书难度太高了,主要是内容设计有关。开篇的内容对于刚接触C语言的人来说确实具有一定的难度,让不少人望而生畏。

其实最令我印象深刻的是:i+=(++i)+(i++)这种类型的代码。我相信你肯定见过且做过,直到现在仍有不少人为之苦恼,其实此类代码的来源就是这里。我们讲理论目的是指导实践,但是这种堆叠式地靠运算符优先级的写法真的意义不大,实际工程中代码的目标是简单易懂且有效,难道仅仅是为了考察运算优先级?

其实不仅是计算机教材,还有更多的比如线性代数教材、专业课教材、教学用到的软件,全都缺乏更新。

▍网友们现身说法

一位网友表示,有一位好心学长将谭先生的《C++程序设计》借给了我,这几乎直接导致了我现在还不会编程。

知乎上的人也有人现身说法:

孙涛表示,我是物理专业的,当初启蒙就是这本书。说的严重点,这本书配合一个半吊子老师几乎毁了物理系所有人对编程的信心。造成的心理阴影直到毕业才逐渐消除。当初学c语言,大家感觉奇难无比,毫无头绪,要花大量时间研究特sb的知识点,比如i++++i。那个老师是教物理实验的,对c语言没什么理解,照本宣科而已。每节c语言课我要先预习两个小时,然后再复习两个小时,勉强能把书上奇奇怪怪的“知识点”搞清楚。当时刚上大一,不知道怎么自学,也不知道有什么好教材。越不懂越去研究谭浩强的书,然后就更蒙圈,恶性循环。

曾一度怀疑自己智商有问题,后来觉得不应该啊。总之当时觉得这门课是难到天上去了,考完之后再不想碰。其实c语言比大多数物理课都简单不少。我的很多同学也是对这门课很厌恶,逃避。后来即使在物理实验中遇到需要编程处理数据的,也是能逃就逃。整个转行系(物理系)毕业后鲜有人从事编程相关,绝对和这次打击有关。到现在大家才慢慢缓过来,开始学习其他编程的东西
敖厂长有一期节目说的是雅达利出品的《外星人ET》游戏直接毁灭了美国的游戏机产业,直到微软xbox才复兴。

谭浩强c语言教材对我的打击不亚于这个。谭浩强也算是中国计算机教育的先行者了,教材错误多,过时了,也不能怪他头上。但是他在书里吹牛逼就不对了,成天发行量破几千万!各个大学也是不思进取,直到现在还在用他的教材。vc++6.0,二级考试,谭书,都可以称得上是毒瘤了

假药郎中表示,应该说有两个原因:

1. 这是本烂书。

2. 作为一本烂书,却借着谭的所谓权威名头,年复一年地祸害一代又一代的学生——这才是最令人愤怒的!

谭书中的错误已有无数人吐槽过了。我自己的一个栗子:当年跟着这本书学的#include "xxxx.c"。

说穿了就是:谭根本沒有C的实际开发经验,只知钻语法的牛角尖。而C恰恰是—门存在着很多“语法上不算错,但实际不能这么写”的语言。谭的书给初学者很多这样的误导。

谭的成名是因为当年在电视上讲的BASIC课程,在那个资料匮乏的年代,应该说谭的课程在计算机教育的启蒙普及上起到了作用。但实事求是的讲,谭当年的这些课程,也就好比一个闭塞山区里的乡村教师自己编的土教材,在没有更好的选择下聊胜于无。但随着社会的巨大进步,后来已经有更多更好的教材可用,他早该退出历史舞台。那样的话,也许他的历史形象更令人尊敬。而多年以来,他的书依然凭借行政权力倚老卖老地霸占着全国那么多的学校,大言不惭的标榜“销量千万”,这就很无耻了,让人鄙视也不为怪了。

邢志鹏表示,国内大学生的普遍思想,大学课本教材都是废物,凡是大学的教材,都是应付考试的。在这种提前下,老谭的书就不能幸免了。

其实很多人喷老谭的书都是以讹传讹,看到很多高手都喷谭浩强的书,然后自己也要鄙视一下谭浩强的书,来显得自己也是高手一样。这种人看到谁在看老谭的书就会说一句,这种垃圾书也看,哥看的都是国外的经典。下次遇到这种人,你就让他不查资料,自己直接找老谭的书上的错误,能找出多少。找不出就别喷好吗。

老谭书上类似i++++i这种代码,确实实际代码这么写不合适,但是作为初学者,这是通过这种方式教你在理解优先级,通过这种拗口的方式可以理解的更加彻底,我觉得没问题。就像小学数学课的应用题。举个例子,池子一边装水,一边放水,求水多久能装满池子。难道也要喷一下什么鬼题目,浪费水。这明明就是考的对题目的理解,又不是真让你去做个实验。一个道理。

我上大学的时候就是看这本书自学的,思想很单纯,认准了这本书,就好好学。我感觉谭浩强的书绝对适合入门,学东西最重要的难道不是入门吗,老外很多书确实经典,但是不适合入门,那就不能推荐给初学者,那样只会害了他们。很多人都是看了老谭的书,对C已经有了一个概念以后,再去看那些书显得很从容,但是如果没有一个基础直接看那些书,未必看得懂。

我相信很多喷老谭的程序员是通过谭浩强的C入了门,那就请你不要喷老谭了。更加鄙视那些通过抨击老谭抬高自己的人。在谭浩强那个年代学计算机的,都是聪明人,别的不说,想学计算机身边连本书都找不到,哪像现在各种书泛滥,网上各种教学视频。那个年代学好计算机除了要聪明,也一定要有毅力。现在的学生以为自己会写几句代码一个个都上天了,以为自己比谭浩强这种老古董要聪明不知多少,可笑!

郭靖的故事大家都知道。他的启蒙老师江南七怪,教他学会了功夫。但是真正让他成为大侠的是洪七公,后来他的功夫已经远远超过了江南七怪,但是他还是那么的尊敬他们,而没有半点瞧不起他们,因为没有江南七怪,郭靖也许就不会有后面的故事。我这个比喻也许非常不恰当,没有谭浩强一定有别的书代替。不过我依然认为初学者可以看看老谭的书,至少他适合入门,如果你觉得他的入太抽象难懂了,我只能说要么你没用心,要么就不适合编程。

Hanson表示,现在黑谭浩强的简直是比比皆是。我觉得对于他的教材应该客观的评价。(吐槽一句,现在跟风的实在太多了,别人说什么他们立马附和,黑谭浩强书的人里面也有不少这样的人,估计好多黑他的人还不知道为什么黑他。。。)

不可否认,他的C语言教材在国内用的最广。既然有那么多人用,那么它就一定有他自己的优点。

我觉得,谭浩强书最大的优点就是特别容易懂(刚看有的答主和我的看法完全相反啊。。。),我指的易懂是指看他的书能很容易的自己写出正确的程序(至于代码风格不好,至少不是错误)。我开始接触C语言是在大概初二的时候,当时我第一本书买的就是第五版谭浩强。对于我们西北的这些信息弱省来说,初中那会大部分学生还不知道编程是什么。以此为背景,他的书能让我在完全没有基础的情况下几个月里学会C语言,易懂性是值得肯定的()。

当然,他的书缺点也是很明显的。

首先(也是我觉得最主要的问题)就是不讲原理。他能很快教会你怎么去写程序,但不告诉你为什么要这么写(和他前言说的不一样啊。。。)。这种写法更适合那些非计算机专业的学生(当然主要指学渣,学霸们请忽略这条),但对于真正学C语言的同学来说,就显得不足,对后续的学习应用也可能会埋下不小的麻烦。

其次是大家吐槽较多的代码风格和小错误(个人觉得第五版里错误已经不怎么常见了,至于风格,好吧,的确不怎么样)。

再有,就是个别地方讲的有些然,没讲透。

(具体例子大家可以参考一下其他答案,有的列出不少,我就不重复列出了。不过说一点,有的错误是在特定版本的书里才出现的,看了一下其他答主找的大部分来自第四版,这些错误有的已经改正,但很多也还在,尤其是有些地方没讲清的问题,大部分在第五版仍存在)

Zhu xiangping表示,我觉得很好,我当时学C++就是用的他的书。看他的书让我感觉最舒服的是每当我看到一处知识产生了疑问然后我再往下看就看到他提出了相同的问题并作出了解答。有很多次这样的体验,我觉得这只能是一个教学经验丰富的老师才能做到。

通过学习他的书,我编程的能力对付一般问题应该没有问题。当时C++考试成绩应该在专业里前三,C++项目实习是第一(实现了很多项目没有要求的功能老师还给附加了分)。后来做通信实验,嫌手动采集处理数据麻烦,我还写了个小软件来实现数据采集处理的自动化。当然这对于那些代码大牛来说应该是小菜一碟,但是当时我就在学校开C++时学过程序语言,其余时间基本没有写过代码。后来接触了几种其他计算机语言,我能很快上手。我想这要归功于当时C++的学习。

对于喷,我想这是不可避免的,知名度越高,喷的人越多。喷与不喷,那是个人的自由。适合自己最好。

▍这本书实际上培养了一大批的人


以前在计算机领域可以借鉴的东西很少,可以说正是这样的书籍,以详细的讲解和通俗易懂的风格,培养了一大批的基础扎实的人才,才有了之后的网页和动画,有了众多的可参考的资料,这些贡献都是不可磨灭的。

谭浩强生于1934年,58年从清华毕业,那时候C语言还没有问世。在久远的过去条件下,写出这么一本编程入门教材实属不易。

而值得注意的是,是多年来大学教材质量并没有明显改进所以,现在就是很矛盾。批评教材的主要意见其实是对的,但是在细节部分很容易受到反驳。

造成这种矛盾的主要原因,因为批评搞错了对象,结果是意见不能集中,越说越乱。现在的主要矛盾,是教材的编写方式陈旧、脱离实际,且长期得不到更新。

这个问题不仅仅发生在计算机课程领域,也不必把这个黑锅背在“谭浩强”身上。一本小说写的好,看的人就多,写的烂,看的人就少,这是显而易见的。某作者写的教材好,就采用;写的烂,就不用。

为什么写的不好还要强制统一使用呢?教材的选用还未得到足够重视中国的“211高校”有100多所,培养的老师数不胜数,其中应该有相当数量的老师有写出好书的实力。就算老师不会写,市面上也已经有好多本优秀的国外教材,提供了较新的编写思路可供参考。但是目前已经普遍反映出,大学教材停止了迭代,更没有有效的、与时俱进的质量把控。强烈希望各个大学从教材出发,做好教书育人的本职工作。

无论怎么吐槽,一个人编程水平的高低和所在大学,使用的什么教材都没有太直接的关系,很多人在网上买编程教材一定想着买个最新版本的,其实完全没有必要,这些都是客观因素,主观因素才是关键,真要想学的好,什么教材都玩的转,取决于内在的意识形态,驱动力不够有再好的教材也是浪费资源,无论怎么说老谭对于中国计算机行业的贡献还是非常突出的,感激的心情更多点。

现在还有很多的论调包含的大致意思就是C语言现在已经不行了,完全没有必要再去学习了,看看招聘职位关于C语言的真是少的可怜,现在明显的都在向高级语言进发了,大趋势是向集成化程度高的语言前进,但是集成化语言本身很多都是C语言完成的,未来可能C语言学习的会变少,但是职位要求以及薪资水平会高的让普通程序员都只有羡慕的份,物以稀为贵,这也是市场规模。踏踏实实学好正在学习的编程语言,把精力放在语言本身,而不是去争论谁好谁坏,即使分出个高低了对于个人又有什么直接好处,认准一种编程语言一直学到最后,然后想办法过度到别的语言,触类旁通。

老谭作为早期的布道者已经做出了不可磨灭的贡献,仅此一点就值得致敬。

【参考资料】
1、知乎 . 《为什么说谭浩强的书是坑?》
2、佚名 . 《怎样评价谭浩强版<C程序设计>?》
3、佚名 . 《为什么这么多人不喜欢谭浩强的C语言程序设计?》

-END-

推荐阅读

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存